//
// YKStack.h
// 栈和堆
//
//
#ifndef YKStack_h
#define YKStack_h
#include <stdio.h>
#include "YKTree.h"
#define kMaxStackLen 20
//!> 字符栈
typedef struct{
    int top;
    char data[kMaxStackLen];
} SqStack;
//!> 字符型链表
typedef struct Linknode {
    char data;
    struct Linknode *next;
} Linknode, *LinkStack;
/** 共享栈 */
typedef struct{
    int stack[kMaxStackLen];
    int top[2];
} stk;
/** 共享栈操作单元 */
typedef struct{
    stk *s; //!> 共享栈
    int i; //!> 操作的栈 只有0和1
    int x; //!> 要操作的数据
}stkopt;
/** 初始化栈操作 */
void InitStack(SqStack *sqs);
/** 1未空栈，0非空  */
int StackEmpty(SqStack *sqs);
int Push(SqStack *sqs, char x);
int Pop(SqStack *sqs, char *x);
int GetTop(SqStack *sqs, char *x);

void initStk(stk *s);
//共享栈出栈操作 0：正常 1：栈号不对 2：满栈
int pushStk(stkopt opt);
//共享栈出栈操作 0：正常 1：栈号不对 2：满空
int popStk(stkopt *opt);

typedef void*  BiNodeP;
typedef struct {
    int top;
    BiNodeP data[kMaxStackLen];
}* SPStack;
SPStack initSPStack(void);
int PushP(SPStack sqs, BiTree nd);
int PopP(SPStack sqs, BiTree *x);
int GetPTop(SPStack sqs, BiTree *x);
int StackPEmpty(SPStack sqs);
#endif
